package com.nbcio.pm.mapper;

import com.nbcio.common.mybatis.core.mapper.BaseMapperPlus;
import com.nbcio.pm.domain.PmProjectMember;
import com.nbcio.pm.domain.vo.PmProjectMemberVo;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 项目成员Mapper接口
 *
 * @author nbacheng
 */
public interface PmProjectMemberMapper extends BaseMapperPlus<PmProjectMember, PmProjectMemberVo> {

    /**
     * 查询项目成员列表
     *
     * @param projectId 项目ID
     * @return 成员列表
     */
    List<PmProjectMemberVo> selectProjectMembers(@Param("projectId") Long projectId);

    /**
     * 查询用户项目权限
     *
     * @param userId 用户ID
     * @param projectId 项目ID
     * @param permission 权限
     * @return 是否有权限
     */
    Boolean checkProjectPermission(@Param("userId") Long userId, @Param("projectId") Long projectId, @Param("permission") String permission);

    /**
     * 更新成员角色
     *
     * @param id 成员ID
     * @param role 角色
     * @return 更新结果
     */
    int updateMemberRole(@Param("id") Long id, @Param("role") String role);

    /**
     * 查询项目成员列表（带关联信息）
     *
     * @param projectId 项目ID
     * @param userId 用户ID
     * @param role 角色
     * @param isActive 是否激活
     * @param remark 备注
     * @param beginJoinDate 开始加入日期
     * @param endJoinDate 结束加入日期
     * @return 成员列表
     */
    List<PmProjectMemberVo> selectVoListWithJoin(@Param("projectId") Long projectId,
                                                @Param("userId") String userId,
                                                @Param("role") String role,
                                                @Param("isActive") Boolean isActive,
                                                @Param("remark") String remark,
                                                @Param("beginJoinDate") String beginJoinDate,
                                                @Param("endJoinDate") String endJoinDate);
}
